package com.dkd.manage.utils;

import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 工单编号生成器
 * 生成格式：年月日时分秒+随机数（如：20251110143025001）
 *
 * @author dkd
 * @date 2025-11-10
 */
@Component
public class TaskNoGenerator
{
    /** 序列号计数器 */
    private static final AtomicInteger sequence = new AtomicInteger(0);

    /** 序号长度（补零后的长度） */
    private static final int SEQUENCE_LENGTH = 3;

    /**
     * 生成工单编号
     * 格式：年月日时分秒+序号（如：20251110143025001）
     *
     * @return 工单编号
     */
    public String generateTaskNo()
    {
        // 获取当前时间（格式：yyyyMMddHHmmss）
        String dateTimeStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));

        // 获取序号（循环使用0-999）
        int seq = sequence.incrementAndGet() % 1000;

        // 格式化序号（补零）
        String sequenceStr = String.format("%0" + SEQUENCE_LENGTH + "d", seq);

        // 返回工单编号
        return dateTimeStr + sequenceStr;
    }
}
